package com.wnxy.sddfp.client.bank;

import com.wnxy.sddfp.client.bank.fallback.TradeLogApiFallback;
import com.wnxy.sddfp.common.model.dto.bank.BankCardAddDTO;
import com.wnxy.sddfp.common.model.dto.bank.SignatureDTO;
import com.wnxy.sddfp.common.model.dto.bid.BankBidDTO;
import com.wnxy.sddfp.common.model.dto.bid.BidBalanceDTO;
import com.wnxy.sddfp.common.model.vo.trade.BorrowSyncRecordVo;
import com.wnxy.sddfp.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @FeignClient
 * 1、定义feign的客户端
 * 2、value 指定服务提供者的服务实例名称
 * 3、fallback 指定远程调用失败时的服务降级类；
 * 远程服务调用失败、超时或出现其他异常时，Feign 可以自动触发降级操作，而不是抛出异常给调用方。
 * 这样可以保证系统的稳定性，防止级联故障，以及提供更好的用户体验。
 * fallback对应的降级类，需要实现feign接口、以及是容器中的bean。
 */
@FeignClient(value = "sddfp-bank-access-service",fallback = TradeLogApiFallback.class)
public interface TradeLogApi {
    /**
     * 绑卡生成交易记录 (对外暴漏的接口，也就是给客户端调用的接口)
     * 注意：这里的方法签名、路径、请求方式必须与服务提供者一致
     */
    @PostMapping("/bank/access/card")
    SignatureDTO proxyBindCardLog(@RequestBody BankCardAddDTO bankCardAddDTO);

    /**
     * 借款记录审核，同步借款数据到银行托管系统
     */
    @PostMapping("/bank/access/sync/borrow")
    Result syncBorrowRecord(@RequestBody BorrowSyncRecordVo borrowSyncRecordVo);

    /**
     * 获取机构账户余额信息
     */
    @GetMapping("/bank/access/bid/balance/{userCode}")
    Result<BidBalanceDTO> getBidBalance(@PathVariable("userCode") String userCode);

    /**
     * 银行保存投标记录
     * @param bankBidDTO
     * @return
     */
    @PostMapping("/bank/access/bid/add")
    Result<String> bankBidService(@RequestBody BankBidDTO bankBidDTO);
}
